perm filename INIT.MUS[MUS,LCS]2 blob
sn#316224 filedate 1977-11-10 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002
C00006 00003 <EXTERNAL FUNCTION
C00008 00004 FUNCTION SYNTH(ARRAY FUNC)
C00010 00005 <comment: type 'SETMAG nchns, srate'
C00013 00006 <FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00016 ENDMK
C⊗;
COMMENT: ******INITIALIZATION FILE FOR MUS10.DMP******** 10/77
***THIS IS STANFORD VERSION.
TO CREATE MUS10.DMP RUN COMMAND FILE, 'LMUS.CMD',
THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.
THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
SEG(ARRAY FUNC)
SYNTH(ARRAY FUNC)
POWER( N, X ) [GIVES POWER OF N TO THE XTH] ;
VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62; CS←DF←277.18; D←293.66; DS←EF←311.13; E←FF←329.63;
F←ES←349.23; FS←GF←369.99; G←391.99; GS←AF←415.31;
A←440; AS←BF←466.16; B←493.89; CF←B/2; BS←C*2;
NOMSG←1; < INHIBITS REPETITIVE MESSAGES
EXTERNAL FUNCTION SIND(A),
SIN(A), EXP(A), ALOG(A), SQRT(A), RDNUM(X),
DPYSET(INTEGER POG,ARRAY DPYBUF,INTEGER SIZE),
ALINE(INTEGER X1,INTEGER Y1,INTEGER X2,INTEGER Y2),
DPYOUT(INTEGER POG), DDCLR, NOTDD(INTEGER K),
AIVECT(INTEGER X,INTEGER Y), SIND(X),
TYPLOC(INTEGER X,INTEGER Y), RVECT(INTEGER X,INTEGER Y);
FUNCTION SEE(ARRAY FUNC);
BEGIN
ARRAY DPY(225); VARIABLE IY,I,IY2;
DPYSET(2,DPY,225); TYPLOC(-100,-412);
COMMENT THIS VERSION MUST BE LOADED WITH %LNEWLIB[1,TVR] (FOR 'DDCLR')
TYPLOC MOVES ONLY WHEN USING DATADISC.;
ALINE(-264,200,256,200); ALINE(-266,328,-246,328);
ALINE(-266,456,-246,456); ALINE(-266,72,-246,72);
ALINE(-266,-56,-246,-56); ALINE(-256,-56,-256,456);
ALINE(0,190,0,210); ALINE(-128,190,-128,210);
ALINE(128,190,128,210);
IY←INT(FUNC(0)*256.0+200.0); AIVECT(-256,IY);
COMMENT: DISPLAY ONLY EVERY THIRD SEGMENT ;
FOR I←1 STEP 3 UNTIL 511 DO
BEGIN
IY2←INT(FUNC(I)*256.0+200.0);
RVECT(3,IY2-IY); IY←IY2;
END; DPYOUT(2);
END;
FUNCTION SEEIT(ARRAY FUNC); BEGIN
VARIABLE K;
IF NOTDD(K) < 0 THEN SEE(FUNC);
END;
<EXTERNAL FUNCTION
< RDNUM(X), SIND(X),
< SIN(A), EXP(A), ALOG(A), SQRT(A);
FUNCTION SEG(ARRAY FUNC);
BEGIN
VARIABLE X512,K,A1,A2,ST,STPP,STPS,IS,IT,DIF,RK;
A1←0; ST←0; STPP←0; X512←0;
WHILE STPP ≤ 1 DO
BEGIN
RDNUM(A2);
IF A2 =512 THEN X512←A2;
IF A2 =512 THEN RDNUM(A2); RDNUM(STPP);
COMMENT: TYPE 512 AT FIRST TO USE 512 STEPS INSTEAD OF 100 STEPS.;
IF STPP ≤ 1 THEN A1←A2;
END;
WHILE STPP < 999 DO
BEGIN
IS← INT(STPP*5.120+.0001);
IF X512 > 0 THEN IS←INT(STPP+.0001);
IF IS > 512 THEN
BEGIN PRINT " *** SMOOTHED ";
FOR K←0 STEP 1 UNTIL 511 DO
COMMENT: READ 512 NUMS FROM A FUNC FILE.;
BEGIN
RDNUM(RK); FUNC(K)← RK;
END;
SEEIT(FUNC); PRINT "SEG ARRAY ";
RETURN;
END;
STPP ← IS-1; STPS ← STPP-ST;
IS ← INT(STPS); DIF←A2-A1;
IT←INT(ST); ST ← STPP;
FOR K←0 STEP 1 UNTIL IS DO
BEGIN
RK ← K;
FUNC(K+IT) ← A1+DIF*RK/STPS;
END;
IF STPP = 511 THEN BEGIN
SEEIT(FUNC);PRINT "SEG ARRAY "; END;
IF STPP ≥ 511 THEN RETURN;
A1←A2; ST←STPP;
RDNUM(A2); RDNUM(STPP);
END;
END;
FUNCTION SYNTH(ARRAY FUNC);
BEGIN
VARIABLE K,XX,H,FAC,CON,AMP,X,XK,J;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN
FUNC(J) ← 0; END;
COMMENT: CLEAR THE ARRAY;
RDNUM(XX); IF XX = 99 THEN XX ← -XX;
H ← XX; IF XX < 0 THEN RDNUM(H);
WHILE H < 999 DO
BEGIN
RDNUM(AMP);
X ←0; CON ←0;
IF XX < 0 THEN
BEGIN
RDNUM(X); RDNUM(CON);
COMMENT X ← X * 1.42222222 +1 ; COMMENT 1.422 = 512/360 ;
X ← X * 512/360 +1;
END;
FOR J ← 0 STEP 1 UNTIL 511 DO
BEGIN
XK ← SIND(X*360/512) * AMP + CON;
COMMENT: .703125 = 360/512 ; XK ← SIND(X*.703125) * AMP + CON ;
IF CON ≥ 100 THEN FUNC(J) ← (XK-100)*FUNC(J) ;
IF CON < 100 THEN FUNC(J) ← FUNC(J) + XK ;
X ← X+H; IF X > 512 THEN X ← X-512;
END;
RDNUM(H);
END;
X ← FUNC(0); COMMENT: NEXT FOR NORMALIZATION;
FOR J ← 1 STEP 1 UNTIL 511 DO BEGIN H ← ABS(FUNC(J));
IF X < H THEN X ← H; END;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN FUNC(J) ← FUNC(J) / X ; END;
SEEIT(FUNC); PRINT " SYNTH ARRAY "; COMMENT:********SEE(FUNC);
END;
FUNCTION POWER(X,N)=EXP(N*ALOG(X)); comment nth power of x;
<comment: type 'SETMAG; nchns, srate' ;
FUNCTION MAGERR(X);
BEGIN PRINT "IMPROPER INPUT. "; X←0;
print "Type number of channels and sample rate: ";
END;
FUNCTION ADJRATE; BEGIN
IF SRATE < 6400 THEN BEGIN
IF SRATE <8 THEN SRATE ← 6400; IF SRATE <10 THEN SRATE ← 8000;
IF SRATE <12 THEN SRATE ← 10000; IF SRATE <16 THEN SRATE ← 12800;
IF SRATE <20 THEN SRATE ← 16000; IF SRATE <25 THEN SRATE ← 20000;
IF SRATE <32 THEN SRATE ← 25600; IF SRATE <40 THEN SRATE ← 32000;
IF SRATE <50 THEN SRATE ← 40000; IF SRATE <60 THEN SRATE ← 51200;
IF SRATE <80 THEN SRATE ← 64000; IF SRATE <100 THEN SRATE ← 80000;
IF SRATE <120 THEN SRATE ← 102400; IF SRATE <130 THEN SRATE ← 128000;
IF SRATE <200 THEN SRATE ← 160000; IF SRATE <220 THEN SRATE ← 204800;
IF SRATE <260 THEN SRATE ← 256000; IF SRATE <4000 THEN SRATE ← 10000;
COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC. 10000=10000;
END; END;
Function SETMAG;
begin
VARIABLE X; X←0;
WHILE X = 0 DO
BEGIN X←1; rdnum(nchns); rdnum(srate);
IF NCHNS > 4 THEN MAGERR(X);
IF NCHNS = 3 THEN MAGERR(X);
IF NCHNS < 1 THEN MAGERR(X);
ADJRATE;
COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
COMMENT: IF INT(SRATE/6400+.1) } SRATE/6400 THEN MAGERR(X);
END;
MAG←512/srate;
PRINT "NCHNS=",NCHNS," SRATE=",SRATE ;
end;
<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12800;
<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;
INSTRUMENT TOOT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;
INSTRUMENT CLAR;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;
INSTRUMENT BRIT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;
INSTRUMENT BUZZ;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;
NOMSG←0;
ARRAY F1,F2,F3,F4,F5,F6(512);
SYNTH(F1);1 1 999; < TOOT - SINE WAVE (USED FOR SIMP ALSO)
SEG(F2);.9 6,1 11 .9 82 .7 90 0 100; < MEZZO LEGATO
SEG(F3);1 3,1 10,.4 23,.15 40,0 100; < STACCATO
SYNTH(F4);1,.5 3,.3 5,.2 7,.1 999; < CLAR
SYNTH(F5);1,.3 2,.4 3,.2 8,.2 12 .1 999; < BRIT
SEG(F6);-1,1 1,7 -1,14 -1,100; < BUZZ
NOMSG←1;
OUTFILE←"TEST.SND"; <SETS UP DEFAULT OUTPUT FILE NAME. (BITS←12;)
PLAY;TOOT 0 .12 C 1000 F2 F1 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F1;FINISH;